2. Actions Tree

A actions tree is an object constituted of nodes, representing all the actions exchanged (performed) beetween server and clients.

For example, let’s assume that we want to handle the communications of a basic chat program. Let’s make a tour of the possibilities :
  • the clients can emmit a public message
  • the clients can also emmit private message, that only one person should see
Of course, this implies that:
  • the server relay public messages to everybody
  • the server relay private messages to the reciever only
  • the clients recieve message from server

Now we know all the actions that will be exchanged, we can represent the actions tree as below :

Tree
    client
        message
            public
            private
    server
        message

2.1. Composition

Actions trees are composed of only one type of object, the Node . But regarding their position in the tree, they do not fullfill the same role. There is three roles :
  • root : the base of the tree
  • node : act as a branch (or node if you feel more comfy with this image)
  • action : the leaves of the tree, they are the very end of it

Let’s take back the tree example above, and see what role the different nodes have :

Tree - root
client - node
message - node
public - action
private - action
server - node
message - action

The two important roles are the root as it has access to all its children, and the action as it is to it we associate encoders and handlers

2.2. Accessing a Node inside a tree

Let’s stay in our example, and assume the tree is already built and assigned to the name ‘tree’ :

>>> #to access to the action private
>>> tree.client.message.private
< Node object at 0x0000000002C2EE80>

Each Node is an attribute of its parent. This mechanism is keystrokes economic, clear and readable despite being also a bit unconventional.

2.3. Behind the scene

The “magic” is awfully simple : each Node (except the root) holds an automatically assigned bytecode. When passing an Node instance to the built-in str(), you obtain a string of bytecodes. The last one, is the one attributed to the Node instance, the one before it comes from its parent, etc...

within our example :

>>> str(tree.client.message.private)
'\x00\x00\x01'

>>> str(tree.server.message)
'\x01\x00'

Table Of Contents

Previous topic

1. Introduction

Next topic

3. Tree Model

This Page